import pygame, random


class Ball:
    ''' class for the ball '''

    def __init__(self, game):
        self.game = game  # 保存游戏实例
        self.screen = game.screen  # 保存游戏屏幕实例
        self.settings = game.settings  # 保存游戏设置实例
        self.color = self.settings.ball_color  # 获取球的颜色
        self.radius = self.settings.ball_radius  # 获取球的半径

        self.reset_ball()  # 将球放置在屏幕中心
        self.draw_ball()  # 绘制球

        self.direction_x = self.ball_direction()  # 随机设置球的x方向
        self.direction_y = self.ball_direction()  # 随机设置球的y方向

    def draw_ball(self):
        ''' Draws the ball to the screen'''
        # 在屏幕上绘制一个球
        pygame.draw.circle(self.screen, self.color,
                           (self.ball_pos_x, self.ball_pos_y), self.radius)  # 画一个圆圈，表示球

    def update(self):
        ''' Moves the ball every frame '''
        # 每帧更新球的位置
        self.x += self.settings.ball_speed_x * self.direction_x  # 更新球的x位置
        self.y += self.settings.ball_speed_y * self.direction_y  # 更新球的y位置

        # 更新球的位置属性
        self.ball_pos_x = self.x  # 更新球的x位置属性
        self.ball_pos_y = self.y  # 更新球的y位置属性

    def ball_direction(self):
        # 确定球的初始方向
        paddle_mid = (self.settings.screen_height // 2) - (self.settings.paddle_height // 2)  # 计算球拍的中间位置
        if self.ball_pos_y <= paddle_mid:  # 如果球在球拍上方
            return -1  # 返回-1，表示球向上运动
        elif self.ball_pos_y >= paddle_mid:  # 如果球在球拍下方
            return 1  # 返回1，表示球向下运动

    def random_ball_direction(self):
        ''' Random ball direction '''
        # 随机选择球的方向
        return random.choice([1, -1])  # 随机返回1或-1

    def check_borders(self):
        ''' check if ball collides with the top and bottom borders '''
        # 检查球是否与屏幕顶部或底部边界碰撞
        if self.y >= self.settings.screen_height or self.y <= 0:  # 如果球超出了屏幕的上下边界
            return True  # 返回True，表示碰撞了

    def reset_ball(self):
        ''' Places the ball in the center of the screen '''
        # 将球放置在屏幕的中心位置
        self.ball_pos_x = self.settings.ball_pos_x  # 设置球的x位置为屏幕中心
        self.ball_pos_y = self.settings.ball_pos_y  # 设置球的y位置为屏幕中心
        self.x = float(self.ball_pos_x)  # 将球的x位置转换为浮点数
        self.y = float(self.ball_pos_y)  # 将球的y位置转换为浮点数
